﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AdmLaboratorios.DTO;
using System.Data.SqlClient;
using System.Data;

namespace AdmLaboratorios.DAO
{
    public class LogDAO : DAOBase<LogDTO>
    {
        public List<string> GetTablas()
        {
            List<string> tablas = new List<string>();

            foreach (DataRow item in base.GetTable("SELECT DISTINCT Tabla FROM [Log]").Rows)
            {
                tablas.Add(Convert.ToString(item["Tabla"]));
            }
            return tablas;
        }

        public DataTable GetLogs(string filtro)
        {
            if (filtro.Trim() != string.Empty)
                return GetTable("SELECT * FROM [Log] WHERE " + filtro);
            else
                return GetTable("SELECT * FROM [Log]");
        }

        private int GetNextId()
        {
            object aux = DAOHelper.EjecutarScalar("SELECT MAX(Id) FROM Log");
            if (aux is DBNull)
                return 1;
            else
                return Convert.ToInt32(aux)+1;
        }

        public LogDTO Create(LogDTO logDTO)
        {
            try
            {
                //Creo un nuevo comando.
                SqlCommand cmd = new SqlCommand();

                //Abro una nueva conexion asignada al comando.
                DAOHelper.PrepararConexion(cmd);

                //Si aún no tenemos el Id del nuevo Item, lo calculamos.
                if (logDTO.Id <= 0)
                    logDTO.Id = GetNextId();

                //Creo los parametros en base a las Propiedades del objeto.
                DAOHelper.CrearParametros(cmd, DAOHelper.CrearParametrosDesdeObjeto(logDTO));

                //Creo la Query en base a los parametros existentes.
                DAOHelper.CrearInsertQuery(cmd, "Log");

                //Ejecuto la query.
                DAOHelper.EjecutarNonQuery(cmd);

                return logDTO;
            }
            catch (Exception e)
            {
                //ToDo: Motor de Loggin.
                throw e;
            }
        }

        //public LogDTO Log(LogDTO.eAcciones accion, string mensaje)
        //{
        //    try
        //    {
        //        LogDTO l = new LogDTO();

        //        l.Accion = accion.ToString();
        //        l.Campo = "";
        //        l.FechaHora = DateTime.Now;
        //        l.Id = GetNextId();
        //        l.IdRegistro = 0;
        //        l.IPPc = DAOHelper.GetIP();
        //        l.Mensaje = mensaje.Trim();
        //        l.NombrePc = System.Environment.MachineName;
        //        l.Tabla = "";
        //        l.Usuario = ""; //ToDo: Get App User.
        //        l.UsuarioPc = System.Environment.UserName;
        //        l.ValorAnterior = "";
        //        l.ValorNuevo = "";

        //        //Creo un nuevo comando.
        //        SqlCommand cmd = new SqlCommand();

        //        //Abro una nueva conexion asignada al comando.
        //        DAOHelper.PrepararConexion(cmd);

        //        //Creo los parametros en base a las Propiedades del objeto.
        //        DAOHelper.CrearParametros(cmd, DAOHelper.CrearParametrosDesdeObjeto(l));

        //        //Creo la Query en base a los parametros existentes.
        //        DAOHelper.CrearInsertQuery(cmd, "Log");

        //        //Ejecuto la query.
        //        dao.EjecutarNonQuery(cmd);

        //        return l;
        //    }
        //    catch (Exception)
        //    {
        //        throw;
        //    }
        //}
    }
}
